/**
 * 给定一个字符串T，问从空开始，将字母一个一个插入到最终完成T
 * 一共有多少种不同的方案
 * 
 * 注意相邻相同字母的影响
 * 对于aab而言，先插入12还是21，属于同一种方案，因此答案为3
 * 还要注意不相邻但在插入过程中可能相邻的相同字母
 * 对于aba而言，先插入13还是31，也是同一种方案，因此答案为5
 * 
 * 因为N只有22，显然是要状压DP的，这里用了自顶向下的实现
 * 但可能迭代更容易，因为相同字母只需要插入第一个即可
 * 
 * 令D[status]表示已经插入的状态
 * dp(status):
 *     if D[status]已经计算则直接返回
 *     依次找每一段：
 *         数位为1且字母相等
 *         在这一段中的最后一个位置记作lastPos
 *         ans = ans + dp(status & (1 << lastPos))
 *     return D[status] = ans
 * 
 * 初始调用dp((1 << N) - 1)即可
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;
llt const MOD = 998244353;

string Target;
int N;
vector<llt> D;
vector<vector<int>> Bit;

llt dp(int status){
    if(-1 != D[status]) return D[status];

    // 快速的过一遍status，连续的字母只能删除最后一个
    int k = 0;
    while(k < N and (0 == (status & (1 << k)))) ++k;
    assert(k < N);

    llt ans = 0;

    while(1){
        assert(status & (1 << k));
        int o = 0;
        int lastPos = -1;
        auto curChar = Target[k];
        
        while(k + o < N){

            if(0 == (status & (1 << k + o))) {
                ++o;
                continue;
            }
            if(curChar == Target[k + o]) {
                lastPos = k + o;
                ++o;
                continue;
            }
            break;
        }

        ans = (ans + dp(status ^ (1 << lastPos))) % MOD;

        if(N == (k += o)) break;
    }

    return D[status] = ans;
}

void work(){
    cin >> N >> Target;
    
    int k = 0;
    while(1){
        int o = 0;
        while(k + o < N and Target[k] == Target[k + o]) ++o;
        
        Bit.emplace_back(vector<int>{});
        for(int j=0;j<o;++j){
            Bit.back().emplace_back(k + j);
        }

        if(N == (k += o)) break;
    }

    D.assign(1 << N, -1);
    D[0] = 1;
    auto ans = dp((1 << N) - 1);
    cout << ans << endl;
    return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	
    int nofkase = 1;
	// cin >> nofkase;
	while(nofkase--) work();
	return 0;
}